#ifndef CLICK_PATHDATA
#define CLICK_PATHDATA
#include <click/element.hh>

CLICK_DECLS

/**
 * Every object has length, class number and c-type.
 */
struct PathData {
	
	// Session
	uint16_t sessionLength; // =12
	uint8_t sessionObjectclass; // =1
	uint8_t sessionCtype; // =1
	
	in_addr destAddress; // Destination address for data packets (unicast or multicast)
	uint8_t protocolId; // Protocol ID for the data flow
	uint8_t flags; // 0x01 = E_Police flag (edge of network)
	uint16_t destPort; // UDP/TCP destination port for the session (zero can be used)
	
	// Time Value
	uint16_t timeLength; // =8
	uint8_t timeObjectclass; // =5
	uint8_t timeCtype; // =1
	
	uint32_t refresh; // The refresh timeout period used to generate this message (in milliseconds)
	
	// Sender Tempate
	uint16_t templateLength; // =12
	uint8_t templateObjectclass; // =11
	uint8_t templateCtype; // =1
	
	in_addr srcAddress;
	uint16_t reserved;
	uint16_t srcPort;
	
	// Sender Tspec	(traffic characteristics of a sender’s data flow)
	// http://www4.informatik.uni-erlangen.de/Projects/JRTP/pmt/node94.html
	uint16_t tspecLength; // =40
	uint8_t tspecObjectclass; // =12
	uint8_t tspecCtype; // =2
	
	uint16_t vers; // =0
	uint16_t flowspecLength; // =7
	uint16_t senderTspecServiceNumber; // =1 (0000000100000000)
	uint16_t dataLength; // =6
	uint8_t parameterId; // =127
	uint8_t senderTspecFlags; // =0
	uint16_t senderTspecParameterLength; // =5
	uint32_t bucketRate;
	uint32_t bucketSize;
	uint32_t peakRate;
	uint32_t minPolicedUnit;
	uint32_t maxPacketSize;
};

CLICK_ENDDECLS
#endif